package com.errol.batchprocessor.batchprocessor;

/**
 * BatchProcessor 抽象批处理模型
 * - 定义了使用线程池处理大批量数据的通用范式，如要查看具体使用，请看 {@link com.renjia.service.module.employeeaddition} 包下人员导入的 package-info
 * -
 * 一些概念说明：
 * - 批次 Batch：一个批次、大批量数据，一个完整的任务
 * - 分片 Piece：由批次拆分出的若干部分，每个分片都由一个线程执行
 * - 单一数据 Single：批次中的一条数据
 * - 数据载体 Payload：Batch、Piece、Single 都有对应的数据载体，其核心是 BE、SE，但可以按需添加其他数据
 * -
 * 泛型符号说明：
 * - IE importBatchEntity：{@link com.renjia.entity.AbstractImportBatch} 的子类，用于记录批次的处理状态及统计信息，可以和 BE 相同，但不建议
 * - AT advisorTypeEnum：一个枚举，用于标识批次的处理使用哪种扩展类型
 * - BE batchEntity：用于代表一个批次的实体类对象，可以是 IE，但不建议这样做
 * - SE singleEntity：一个批次真正要处理的实体类对象
 * - BP batchPayload：批次数据载体，{@link com.renjia.service.generic.middleware.batchprocessor.payload.AbstractBatchPayload} 的子类
 * - PP piecePayload：分片数据载体，{@link com.renjia.service.generic.middleware.batchprocessor.payload.AbstractPiecePayload} 的子类
 * - SP singlePayload：单一数据载体：{@link com.renjia.service.generic.middleware.batchprocessor.payload.AbstractSinglePayload} 的子类
 * -
 * 子包说明：
 * - abs：上一级抽象，包括所有扩展点接口的基类、和扩展点容器的抽象实现
 * - advisor：批处理模型的扩展点，使用该批处理模型时需依次继承这些扩展点
 * - advisorimpl：扩展点相关的通用实现
 * -    batchsplitter：分片策略，策略的使用方式请看 {@link com.renjia.service.module.employeeaddition.advisorimpl.common.AbstractEmployeeAdvisorImpl#doSplitOnBatchAdded}
 * -    timeconsole：批处理时间统计输出，使用方式请看 {@link com.renjia.service.module.employeeaddition.advisorimpl.enhance.EmployeeAdditionTimeAdvisorImpl}
 * - bo：模型对外提供的数据对象
 * - payload：BP、PP、SP 的抽象实现
 * -
 * 重点类说明：
 * - BatchProcessor：批处理模型接口，使用方式请看 {@link com.renjia.service.module.employeeaddition.EmployeeAdditionService}
 * - AbstractBatchProcessorImpl：批处理模型抽象实现，使用方式请看 {@link com.renjia.service.module.employeeaddition.EmployeeAdditionServiceImpl}
 * - BatchProcessorMonitor：批处理模型监控管理接口，使用方式请看 {@link com.renjia.service.module.employeeaddition.EmployeeMonitorService}
 * - AbstractBatchProcessorMonitorImpl：批处理监控管理的抽象实现，使用方式请看 {@link com.renjia.service.module.employeeaddition.EmployeeMonitorServiceImpl}
 * - AbstractBatchProcessorAdvisorContainer：批处理扩展点容器，所有扩展点的接口都需要在容器中实现，子类在加入 spring 容器时必须使用 @Primary 修饰
 * -    使用方式请看 {@link com.renjia.service.module.employeeaddition.EmployeeAdvisorContainer}
 */
